package cn.kilo.test.WeChatPay;

import cn.kilo.types.common.WeChatConstant;
import com.wechat.pay.java.core.Config;
import com.wechat.pay.java.core.RSAAutoCertificateConfig;
import com.wechat.pay.java.service.payments.h5.H5Service;
import com.wechat.pay.java.service.payments.h5.model.*;
import lombok.extern.slf4j.Slf4j;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.stereotype.Component;
import org.springframework.test.context.junit4.SpringRunner;

@Slf4j
@RunWith(SpringRunner.class)
@SpringBootTest
@Component
public class H5Pay {

    public static Config config;

    @Before
    public void setUp(){
        config= new RSAAutoCertificateConfig.Builder()
                .merchantId("1677148696")
                .privateKeyFromPath("D:/key/apiclient_key.pem")
                .merchantSerialNumber("1204C31EC5F3E4248253BB2FC7D5D548AA3BDE9B")
                .apiV3Key("7TYWfF5idjRMzGkqNNbhIwbJnZABXzqa")
                .build();
    }

    /**
     * 预下单（请求下单，后端这里保存订单，并请求为微信支付的预下单，获取到URL并返回给前端 code:302）
     * 商户系统先调用该接口在微信支付服务后台生成预支付交易单，
     * 返回正确的预支付交易会话标识后再按Native、JSAPI、APP等不同场景生成交易串调起支付。
     */
    @Test
    public void prePay(){
        //构建service
        H5Service h5Service=new H5Service.Builder().config(config).build();

        PrepayRequest prepayRequest=new PrepayRequest();

        Amount amount=new Amount();
        H5Info h5Info=new H5Info();
        h5Info.setType("场景类型");
        SceneInfo sceneInfo=new SceneInfo();
        sceneInfo.setPayerClientIp("192.168.124.8");
        sceneInfo.setH5Info(h5Info);

        //设置金额(单位：分)
        amount.setTotal(100);
        prepayRequest.setAmount(amount);
        prepayRequest.setAppid("wx71df0eacad878acf");
        prepayRequest.setMchid("1677148696");
        prepayRequest.setDescription("商品描述");
        prepayRequest.setOutTradeNo("123456");
        prepayRequest.setNotifyUrl("http://nefuexpress.com:8091/wx/callBack");
        prepayRequest.setSceneInfo(sceneInfo);
        PrepayResponse prepay = h5Service.prepay(prepayRequest);
        System.out.println(prepay);
        //应答参数为支付跳转链接，h5_url为拉起微信支付收银台的中间页面，可通过访问该URL来拉起微信客户端，完成支付，h5_url的有效期为5分钟。
    }


    /**
     * 调起支付
     * 商户后台系统先调用微信支付的H5下单接口，
     * 微信后台系统返回链接参数h5_url，
     * 用户使用微信外部的浏览器访问该h5_url地址调起微信支付中间页
     */
    @Test
    public void pay(){

    }
}
